Описание
Объект Workspace определяет именованный сеанс работы
пользователя. Этот объект содержит открытые базы данных и предоставляет
механизмы для одновременного выполнения транзакций, а также, в рабочей области
Microsoft Jet, поддерживает работу защищенной рабочей группы. Этот объект
также определяет, осуществляется ли доступ к внешним данным через ядро базы
данных Microsoft Jet или через механизм ODBCDirect.
Замечания
Объект Workspace является непостоянным объектом, который
определяет, осуществляется ли доступ к внешним данным через ядро базы данных
Microsoft Jet или через механизм ODBCDirect. Объект
Workspace используется для управления текущим сеансом работы или для
запуска дополнительного сеанса. В каждом работы допускается открытие нескольких
баз данных или подключений, а также выполнение транзакций. Например, данный
объект позволяет:
1. Открыть именованный сеанс с использованием свойств
Name, UserName и Type. Сеанс работы создает область
определения, в которой возможно открытие нескольких баз данных и проведение
одной серии вложенных транзакций.
2. Вызвать метод Close для закрытия
сеанса.
3. Вызвать метод OpenDatabase для открытия одной или
нескольких существующих баз данных в данном объекте Workspace.
4.
Использовать методы BeginTrans, CommitTrans и Rollback для
управления вложенными транзакциями в пределах объекта Workspace, а также
использовать несколько объектов Workspace для одновременного выполнения
нескольких пересекающихся транзакций.
Кроме того, при работе с базой данных
Microsoft Jet имеется возможность установить систему защиты, основанную
на использовании имен пользователей и паролей:
1. Семейства Groups и
Users позволяют установить разрешения на доступ к объектам для
пользователей и групп в объекте Workspace.
2. Семейство
IsolateODBCTrans позволяет изолировать множественные транзакции, в
которых используется одна и та же база данных, подключенная к ядру Microsoft
Jet.
При первой ссылке или первом вызове объекта Workspace
автоматически создается стандартная рабочая область
DBEngine.Workspaces(0), в которой свойства Name и UserName
по умолчанию получают значения, соответственно, "#Default Workspace#" и
"Admin". Если система защиты баз данных активизирована, то значением
свойства UserName становится имя подключенного пользователя.
Для
создания объекта Workspace ODBCDirect, позволяющего избежать загрузки
ядра базы данных Microsoft Jet в память, следует задать константу
dbUseODBC в свойстве DefaultType объекта DBEngine или в
аргументе тип метода CreateWorkspace.
В транзакциях участвуют все базы
данных, входящие в состав данного объекта Workspace, даже если при этом
открыто несколько объектов Database. Например, если пользователь вызывает
метод BeginTrans, обновляет несколько записей в базе данных, а затем
удаляет записи в другой базе данных, то при вызове метода Rollback
свертываются (отменяются) и операции удаления, и операции обновления. Для того
чтобы транзакции выполнялись независимо для разных объектов Database,
следует создать или открыть независимые объекты Workspace.
Объекты
Workspace создаются с помощью метода CreateWorkspace. Если
предполагается ссылаться на новый объект Workspace через семейство, то
необходимо после создания объекта добавить этот объект в семейство
Workspaces.
Допускается также использование нового объекта
Workspace без его добавления в семейство. Ссылки на объект при этом
осуществляются через объектную переменную, которой присвоен объект.
При
ссылках на объект Workspace используют его порядковый номер в семействе
или значение свойства Name (имя):
DBEngine.Workspaces(0)
DBEngine.Workspaces("имя")
DBEngine.Workspaces![имя]
Пример
Следующая программа использует метод CreateWorkspace для
создания рабочей области Microsoft Jet и рабочей области
ODBCDirect. Затем печатаются списки свойств двух рабочих областей.
Sub CreateWorkspaceX()
Dim wrkODBC As Workspace
Dim wrkJet As Workspace
Dim wrkLoop As Workspace
Dim prpLoop As Property
' Создает рабочую область ODBCDirect. До создания рабочей
' области Microsoft Jet, ядро базы данных Microsoft Jet
' не будет загружено в память.
Set wrkODBC = CreateWorkspace("ODBCWorkspace", "admin", "", dbUseODBC)
Workspaces.Append wrkODBC
DefaultType = dbUseJet
' Создает безымянный объект Workspace с типом,
' указанным в свойстве DefaultType объекта DBEngine
' (dbUseJet).
Set wrkJet = CreateWorkspace("", "admin", "")
' Отображает семейство Workspaces.
Debug.Print "Объекты Workspace в семействе Workspaces:"
For Each wrkLoop In Workspaces
Debug.Print " " & wrkLoop.Name
Next wrkLoop
With wrkODBC
' Отображает семейство Properties объекта ODBCDirect.
Debug.Print "Свойства " & .Name
On Error Resume Next
For Each prpLoop In .Properties
Debug.Print " " & prpLoop.Name & " = " & prpLoop
Next prpLoop
On Error GoTo 0
End With
With wrkJet
' Отображает семейство Properties рабочей области
' Microsoft Jet.
Debug.Print "Свойства безымянной рабочей области Microsoft Jet"
On Error Resume Next
For Each prpLoop In .Properties
Debug.Print " " & prpLoop.Name & " = " & prpLoop
Next prpLoop
On Error GoTo 0
End With
wrkODBC.Close
wrkJet.Close
End Sub